package com.mongodb.service;

import com.mongodb.entity.Story;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service;

import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
import java.util.regex.Pattern;

/**
 * @author ：qs
 * @date ：Created in 2022/9/5
 * @description：
 * @modified By：
 */
@Service("storyServiceBean")
public class StoryService {
    private MongoTemplate mongoTemplate;
    @Autowired
    public void setMongoTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    /**
     * 将数据存入MongoDB
     * @param story
     */
    public void addStory(Story story){
        // insert(): 若新增数据的主键已经存在，则会抛异常提示主键重复，不保存当前数据。可批处理
        // save(): 若新增数据的主键已经存在，则会对当前已经存在的数据进行修改操作。
        mongoTemplate.insert(story);
    }
    /**
     * 查找Story集合的所有文档
     * @return
     */
    public List<Story> findAllStory(){
        return mongoTemplate.findAll(Story.class);
    }

    /**
     * 通过故事ID查找故事对象
     * @param id
     * @return
     */
    public List<Story> findStoryById(String id){
        Query query = new Query();
        // 多个条件则重复类似以下语句
        query.addCriteria(Criteria.where("_id").is(id));
        return mongoTemplate.find(query,Story.class,"story");
    }

    /**
     * 模糊查询story集合content内容
     * @param content
     * @return
     */
    public List<Story> findContent(String content){
        Pattern pattern = Pattern.compile(".*"+content+".*");
        Query query = new Query(Criteria.where("content").regex(pattern));
        return mongoTemplate.find(query,Story.class,"story");
    }
}